// pages/teacher/create-test/index.js
import { Serve } from '../../../utils/index'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    name: '',
    titles: [],
    class_id: '',
    class_name: '',
    // 选择班级下标
    index: -1,
    has_file: false,
    _id: '',
    classes: []
  },

  handleNameInput(e) {
    this.setData({ name: e.detail.value })
  },

  handleClassChange(e) {
    const index = e.detail.value
    const { classes } = this.data
    this.setData({ class_id: classes[index]._id, class_name: classes[index].name, index })
  },

  handleHasFileChange(e) {
    this.setData({ has_file: e.detail.value })
  },
  
  // mark: 添加新题
  addNewTitle() {
    // type 0: 填空题
    // type 1: 选择题
    const test_id = this.data._id
    const { titles } = this.data
    const index = titles.length
    const newTitle = {
      test_id,
      index,
      type: 1,
      title: '',
      options: [],
      answer: '',
      score: 1
    }
    titles.push(newTitle)
    this.setData({ titles })
  },

  // mark: 选择题添加新选项
  addNewOption(e) {
    const { titles } = this.data
    const { index } = e.currentTarget.dataset
    const optionIndex = titles[index].options.length
    const newOption = {
      index: optionIndex,
      title: '',
    }
    // 添加选项
    titles[index].options.push(newOption)
    this.setData({ titles })
  },

  // mark: 改变题目类型
  handleTitleTypeChange(e) {
    const { index } = e.currentTarget.dataset
    const { titles } = this.data
    titles[index].type = e.detail.value ? 1 : 0
    titles[index].options.splice(0)
    this.setData({ titles }) 
  },

  // mark: 输入选项题干
  handleOptionTitleInput(e) {
    const { titles } = this.data
    const { titleindex, optionindex } = e.currentTarget.dataset
    const title = e.detail.value
    titles[titleindex].options[optionindex].title = title
    this.setData({ titles })
  },

  // mark: 指定选择题正确答案
  selectAnswer(e) {
    const {
      titleindex, // 题目index
      optionindex // 选项index
    } = e.currentTarget.dataset
    const { titles } = this.data
    console.log({ titleindex, optionindex })
    titles[titleindex].answer = optionindex
    this.setData({ titles })
  },

  handleTitleScoreChange(e) {
    const score = e.detail.value * 1
    const { index } = e.currentTarget.dataset
    const { titles } = this.data
    titles[index].score = score
    this.setData({ titles })
  },

  handleTitleTitleChange(e) {
    const title = e.detail.value
    const { index } = e.currentTarget.dataset
    const { titles } = this.data
    titles[index].title = title
    this.setData({ titles })
  },

  async confirmAddTest() {
    // 可以没有题目,只有实验报告
    const { titles, name, class_id, _id } = this.data
    // 去掉has_file 写死
    const has_file = false
    let flag = true

    // 测试名称不可为空
    if (!name) {
      wx.showToast({ title: '未填写名称', mask: true, icon: 'error' })
      return 0
    }

    // 发放班级不可为空
    if (!class_id) {
      wx.showToast({ title: '请选择班级', mask: true, icon: 'error' })
      return 0
    }

    // 没有添加题目且无实验报告
    if (!titles.length && !has_file) {
      wx.showToast({ title: '不能什么都没有吧', mask: true, icon: 'none' })
      return 0
    }

    // 遍历题目, 看看是否有漏填的题干与选项题干以及分数
    for (let i = 0; i < titles.length; i++) {
      const title = titles[i]
      // 公共部分: title
      if (!title.title) {
        wx.showToast({ title: `第${i + 1}题没有填写题干`, mask: true, icon: 'none' })
        flag = false
        break
      }
      // 检查填空题(主观题可以不用填"answer"字段)
      if (!title.type) {
        // 选择题必须有选项
        if (title.options.length < 2) {
          wx.showToast({ title: `第${i + 1}题最少要有2个选项`, icon: 'none', mask: true })
          flag = false
          break
        }
        // 如果有题目没有选择答案
        if (!(title.answer).toString()) {
          wx.showToast({ title: `第${i + 1}题没有选择答案`, icon: 'none', mask: true })
          flag = false
          break
        }
        for (let j = 0; j < title.options.length; j++) {
          const option = title.options[j]
          if (!option.title) {
            wx.showToast({ title: `第${i + 1}题的第${ j + 1}个选项没有填写题干`, mask: true, icon: 'none' })
            flag = false
            break
          }
        }
      }
    }

    if (!flag) {
      return 0
    }

    wx.showLoading({ title: '创建测试中', mask: true })
    await Serve.AddTest({ name, has_file, _id, class_id })
    wx.hideLoading()

    wx.showLoading({ title: '添加题目中', mask: true })
    await Serve.AddTitles({ titles, test_id: _id })
    wx.hideLoading()

    wx.switchTab({
      url: '/pages/home/index',
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  async onLoad(options) {
    const role = 2
    const _id = Math.random().toString(32).substring(2, 10).toUpperCase()
    const classes = await Serve.GetClasses(2)
    this.setData({ _id, classes })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})